package com.qq.API_日期与时间.JDK8;

import java.time.Instant;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZonedDateTime;
import java.util.Date;

//Instant时间戳
//JDK8获取时间戳特别简单，且功能更丰富。Instant类由一个静态的工厂方法now()可以返回当前时间戳
//时间戳是包含日期和时间的，与java.util.Date很类似，事实上就是JDK8以前的Date
//但时间戳功能更多，用起来更方便，时间戳是不可变对象。
//Instant和Date两个类可以进行转换。

//创建对象
//public static Instant now()         调用静态方法，根据当前时间，创建对象
//public static Instant ofEpochMilli(long time)      毫秒值转时间戳
//常用方法：
//plusMillis,minusMillis,isAfter,isBefore,
//getEpochSecond()  从1970-01-01T00：00：00Z的Java时代获取秒数。


public class API_Instant {
    public static void main(String[] args) {
        // 1、得到一个Instant时间戳对象
        Instant instant = Instant.now();
        System.out.println(instant);
        
        //用毫秒值创建时间戳对象
        long time = System.currentTimeMillis();
        Date date1 = new Date(time);
        System.out.println(date1);//date是系统此刻时间，Instant
        Instant instant2 = Instant.ofEpochMilli(time);//中国比世界标准时间快了8个小时
        System.out.println(instant2);
        
        //加33333毫秒
        System.out.println(instant.plusMillis(333333));//创建了新对象
        System.out.println(instant);//不可变对象不会被修改
        
        // 2、拿系统此刻时间戳
        Instant instant1 = Instant.now();
        //获取系统默认时区
        ZoneId z = ZoneId.systemDefault();                  
        ZonedDateTime time1 = instant1.atZone(z);
        System.out.println(time1);//不是Instant类
        
        // 3、与Date相互转换
        Date date = Date.from(instant);//Instant转Date，会自动换成东八区
        System.out.println(date);
        Instant i2 = date.toInstant();//Date转Instant
        System.out.println(i2);
        System.out.println("----------------");
        
        // 1、创建Instant的对象，获取此刻时间信息
        Instant now = Instant.now(); // 不可变对象
        // 2、获取总秒数
        long second = now.getEpochSecond();
        System.out.println(second);

        // 3、不够1秒的纳秒数
        int nano = now.getNano();
        System.out.println(nano);
        System.out.println(now);

        Instant instant3 = now.plusNanos(111);

        // Instant对象的作用：做代码的性能分析，或者记录用户的操作时间点
        Instant now1 = Instant.now();
        // 代码执行。。。。
        Instant now2 = Instant.now();

        
        
    }
}
